
// 理解任意对象(class-level)的原型(prototype)都是一个实例(instance)

function Student(){}

// 任意对象的原型上都可以通过constructor属性获得该对象对应的构造函数
console.log( Student.prototype.constructor === Student ); // true

// 创建 Student 对象(class-level)的实例(instance)
let s = new Student();
// 除原型对象外的任意实例都可以通过constructor获得其相应对象的构造函数
console.log( s.constructor === Student ); // true
//console.log( s.__proto__ === Student.prototype ); // true
// 通过任意实例(instance)都可以获得该实例(instance)所对应对象(class-level)的原型对象
console.log( Object.getPrototypeOf( s ) === Student.prototype ); // true

// 获得 Student 对象(class-level) 的原型
let p = Student.prototype ; // 原型是某个对象(class-level)的实例(instance)
// 获得 p 所引用实例(instance)对应的对象(class-level)的原型(prototype)
let proto = Object.getPrototypeOf( p ); // let proto = p.__proto__ ;
// 使用原型的 constructor 属性获得该原型对应的 构造函数 (即对象)
let cons = proto.constructor ;
console.log( cons.name ); // 输出构造函数名称(即对象名称)
